/**
 * 这里用于配置生产环境的webpack配置
 */

const { merge } = require('webpack-merge');
const baseConfig = require('./webpack.config')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin  //用于分析打包结果的插件
// const CompressionPlugin = require('compression-webpack-plugin')  //根据配置对文件进行压缩
const prodConfig = {
    mode: "production",
    // devtool:"none", //webpage5不支持 none

    //分包策略
    optimization: {
        /* 1. 代码分割 ➜ 把 node_modules 打成一个 vendor 包，公共代码打成一个 common 包 */
        splitChunks: {
            chunks: 'all',              // 对同步 + 异步 chunk 都生效
            cacheGroups: {
                vendor: {
                    name: 'vendor',         // 输出文件名 vendor.xxxxx.js
                    test: /[\\/]node_modules[\\/]/,
                    priority: 10,           // 权重，越大越优先
                    reuseExistingChunk: true
                },
                common: {
                    name: 'common',
                    minChunks: 2,           // 被至少 2 个 chunk 引用才独立打包
                    priority: 5,
                    reuseExistingChunk: true
                }
            }
        },

        /* 2. 单独抽离运行时代码（webpack 自己的引导代码），避免 vendor 缓存失效 */
        runtimeChunk: { name: 'runtime' },

        /* 3. 压缩：JS 用 Terser，CSS 用 css-minimizer-webpack-plugin */
        minimizer: [
            new TerserPlugin({
                terserOptions: {
                    compress: { drop_console: true }  // 删除 console.*
                }
            }),
            new CssMinimizerPlugin()
        ],

        plugins: [
            new BundleAnalyzerPlugin({
                analyzerMode: 'static', // 生成静态 HTML 文件
                openAnalyzer: true, // 自动打开浏览器
                reportFilename: 'bundle-report.html', // 报告文件名
            }),
        ]
    }
}

module.exports = merge(baseConfig, prodConfig)